% -*- coding:utf-8 -*-

\section{Analizador Léxico}
\label{sec:lexico}
El analizador lexico se ha desarrollado utilizando la herramienta
\emph{flex}, versión 2.5.35. Los tokens utilizados por el lenguaje se
muestran en la siguiente tabla:\\

\begin{tabular}{|c|c|l|} \hline
\textbf{TOKEN} & \textbf{LEXEMA EJEMPLO} & \textbf{PATRON}\\\hline
host & host & Combinación de caracteres \emph{host}\\\hline
dev & dev & Combinación de caracteres \emph{dev}\\\hline
link & link & Combinación de caracteres \emph{link}\\\hline
up & up & Combinación de caracteres \emph{up}\\\hline
down & down & Combinación de caracteres \emph{down}\\\hline
addr & addr & Combinación de caracteres \emph{addr}\\\hline
network & network & Combinación de caracteres \emph{network}\\\hline
scope & scope & Combinación de caracteres \emph{scope}\\\hline
route & route & Combianción de caracteres \emph{route}\\\hline
global & global & Combinación de caracteres \emph{global}\\\hline
site & site & Combinación de caracteres \emph{site}\\\hline
link & link & Combinación de caracteres \emph{link}\\\hline
host & host & Combinación de caracteres \emph{host}\\\hline
net & net & Combinación de caracteres \emph{net}\\\hline
default & default & Combinación de caracteres \emph{default}\\\hline
via & via & Combinación de caracteres \emph{via}\\\hline
net & net & Combinación de caracteres \emph{net}\\\hline
metric & metric & Combinación de caracteres \emph{metric}\\\hline
priority & priority & Combinación de caracteres
\emph{priority}\\\hline
unicast & unicast & Combinación de caracteres \emph{unicast}\\\hline
unreachable & unreachable & Combinación de caracteres
\emph{unreachable}\\\hline
blackhole & blackhole & Combinación de caracteres
\emph{blackhole}\\\hline
prohibit & prohibit & Combinación de caracteres
\emph{prohibit}\\\hline
local & local & Combinación de caracteres \emph{local}\\\hline
broadcast & broadcast & Combinación de caracters
\emph{broadcast}\\\hline
throw & throw & Combinación de caracteres \emph{throw}\\\hline
nat & nat & Combinación de caracteres \emph{nat}\\\hline
anycast & anycast & Combinación de caracteres \emph{anycast}\\\hline
multicast & multicast & Combinación de caracters
\emph{multicast}\\\hline
router & router & Combinación de caracteres \emph{router}\\\hline
mtu & mtu & Combinación de caracteres \emph{mtu}\\\hline
multicast & multicast & Combinación de caracteres
\emph{multicast}\\\hline
on & on & Combinación de caracteres \emph{on}\\\hline
off & off & Combinación de caracteres \emph{off}\\\hline
: & : & Caracter ':'\\\hline
\{ & \{ & Caracter '\{'\\\hline
\} & \} & Caracter '\}'\\\hline
ident & rocambolesco10 & [a-zA-Z][a-zA-a0-9]*\\\hline
addressId & 127.0.0.1/24 & [0-9a-zA-Z]+[0-9a-zA-Z./]*\\\hline
num & 12345 & [1-9][0-9]*\\\hline
\end {tabular}
\begin{tbl}
  \caption {Tabla de Tokens para el analizador léxico}
\end{tbl}

\subsection{Código fuente del analizador léxico}
\label{subsec:lexsrc}
El analizador léxico, como se ha comentado anteriormente, está
implementado con \emph{flex} y especialmente preparado para ser
implementado como parte de una clase en \emph{C++}.

\lstset{
        basicstyle=\small,
        tabsize=2,
        commentstyle=\color{blue},
        keywordstyle=\bfseries,
        identifierstyle=\ttfamily,
        breaklines,
        captionpos=t,
        showstringspaces=false,
        extendedchars=true,
        frame=trBL,
	frameround=shadowbox
        xleftmargin=1.0cm,
        xrightmargin=0.5cm,
      }

\lstinputlisting[numbers=left, language=c++]{../../src/scanner/lexer.l}
\begin{lst}
\caption{Implementación del Analizador Léxico en \emph{flex}.}
\label{lst:lexer}
\end{lst}
\par

En el listado ~\ref{lst:lexer} se puede ver dicha
implementación. Tiene poco que comentar, pues se trata de un archivo
bastante estándard. Destaca la función \emph{initScanner} que se
encarga de inicializar una tabla hash para la búsqueda de palabras
reservadas y la función \emph{checkKeyword} que comprueba si un
identificador es una tabla palabra reservada o no.

